home *** CD-ROM | disk | FTP | other *** search
- /* System dependencies in the W3 library
- SYSTEM DEPENDENCIES
-
- System-system differences for TCP include files and macros. This
- file includes for each system the files necessary for network and
- file I/O.
-
- AUTHORS
-
- TBL Tim Berners-Lee, W3 project, CERN, <timbl@info.cern.ch>
- EvA Eelco van Asperen <evas@cs.few.eur.nl>
- MA Marc Andreessen NCSA
- AT Aleksandar Totic <atotic@ncsa.uiuc.edu>
- SCW Susan C. Weber <sweber@kyle.eitech.com>
- MJW Michael J Witbrock <witbrock@cmu.edu>
- MWM Mike Meyer <mwm@contessa.phone.net>
-
- HISTORY:
- 22 Feb 91 Written (TBL) as part of the WWW library.
- 16 Jan 92 PC code from EvA
- 22 Apr 93 Merged diffs bits from xmosaic release
- 29 Apr 93 Windows/NT code from SCW
-
- Much of the cross-system portability stuff has been intentionally
- REMOVED from this version of the library by Marc A in order to
- discourage attempts to make "easy" ports of Mosaic for X to non-Unix
- platforms. The library needs to be rewritten from the ground up; in
- the meantime, Unix is *all* we support or intend to support with
- this set of source code.
-
- */
-
- #ifndef TCP_H
- #define TCP_H
-
- /*
-
- Default values
-
- These values may be reset and altered by system-specific sections
- later on. there are also a bunch of defaults at the end .
-
- */
- /* Default values of those: */
- #define NETCLOSE close /* Routine to close a TCP-IP socket */
- #define NETREAD HTDoRead /* Routine to read from a TCP-IP socket */
- #define NETWRITE write /* Routine to write to a TCP-IP socket */
-
- /* Unless stated otherwise, */
- #define SELECT /* Can handle >1 channel. */
- #define GOT_SYSTEM /* Can call shell with string */
-
- #ifdef unix
- #define GOT_PIPE
- #endif
-
- typedef struct sockaddr_in SockA; /* See netinet/in.h */
-
-
- #ifndef STDIO_H
- #include <stdio.h>
- #define STDIO_H
- #endif
-
- #ifdef _AIX
- #define AIX
- #endif
- #ifdef AIX
- #define unix
- #endif
-
- #ifdef _IBMR2
- #define USE_DIRENT /* sys V style directory open */
- #endif
-
- /* Solaris. */
- #if defined(sun) && defined(__svr4__)
- #define USE_DIRENT /* sys V style directory open */
- #endif
-
- #if defined(__alpha)
- #define USE_DIRENT
- #endif
-
- #ifndef USE_DIRENT
- #ifdef SVR4
- #define USE_DIRENT
- #endif
- #endif /* not USE_DIRENT */
-
- #include <string.h> /* For bzero etc */
-
- /* Use builtin strdup when appropriate. */
- #if defined(ultrix) || defined(VMS) || defined(NeXT)
- extern char *strdup ();
- #endif
-
-
-
- /*
-
- VAX/VMS
-
- Under VMS, there are many versions of TCP-IP. Define one if you do
- not use Digital's UCX product:
-
- UCX DEC's "Ultrix connection" (default)
- WIN_TCP From Wollongong, now GEC software.
- MULTINET From SRI, now from TGV Inv.
- DECNET Cern's TCP socket emulation over DECnet
-
- The last three do not interfere with the
- unix i/o library, and so they need special calls to read, write and
- close sockets. In these cases the socket number is a VMS channel
- number, so we make the @@@ HORRIBLE @@@ assumption that a channel
- number will be greater than 10 but a unix file descriptor less than
- 10. It works.
-
- */
- #ifdef vms
- #ifdef WIN_TCP
- #undef NETREAD
- #undef NETWRITE
- #undef NETCLOSE
- #define NETREAD(s,b,l) ((s)>10 ? netread((s),(b),(l)) : read((s),(b),(l)))
- #define NETWRITE(s,b,l) ((s)>10 ? netwrite((s),(b),(l)) : write((s),(b),(l)))
- #define NETCLOSE(s) ((s)>10 ? netclose(s) : close(s))
- #endif
-
- #ifdef MULTINET
- #undef NETCLOSE
- #undef NETREAD
- #undef NETWRITE
- #define NETREAD(s,b,l) ((s)>10 ? socket_read((s),(b),(l)) : read((s),(b),(l)))
- #define NETWRITE(s,b,l) ((s)>10 ? socket_write((s),(b),(l)) : \
- write((s),(b),(l)))
- #define NETCLOSE(s) ((s)>10 ? socket_close(s) : close(s))
- #endif
-
- /* Certainly this works for UCX and Multinet; not tried for Wollongong
- */
- #ifdef MULTINET
- #include "multinet_root:[multinet.include.sys]types.h"
- #include "multinet_root:[multinet.include]errno.h"
- #include "multinet_root:[multinet.include.sys]time.h"
- #else
- #include types
- #include errno
- #include time
- #endif /* multinet */
-
- #include string
-
- #ifndef STDIO_H
- #include stdio
- #define STDIO_H
- #endif
-
- #include file
-
- #include unixio
-
- #define INCLUDES_DONE
-
- #ifdef MULTINET /* Include from standard Multinet directories */
- #include "multinet_root:[multinet.include.sys]socket.h"
- #ifdef __TIME_LOADED /* defined by sys$library:time.h */
- #define __TIME /* to avoid double definitions in next file */
- #endif
- #include "multinet_root:[multinet.include.netinet]in.h"
- #include "multinet_root:[multinet.include.arpa]inet.h"
- #include "multinet_root:[multinet.include]netdb.h"
-
- #else /* not multinet */
- #ifdef DECNET
- #include "types.h" /* for socket.h */
- #include "socket.h"
- #include "dn"
- #include "dnetdb"
- /* #include "vms.h" */
-
- #else /* UCX or WIN */
- #include socket
- #include in
- #include inet
- #include netdb
-
- #endif /* not DECNET */
- #endif /* of Multinet or other TCP includes */
-
- #define TCP_INCLUDES_DONE
-
- #endif /* vms */
-
-
-
- /*
-
- SCO ODT unix version
-
- */
-
- #ifdef sco
- #include <sys/fcntl.h>
- #define USE_DIRENT
- #endif
-
- /*
-
- MIPS unix
-
- */
- /* Mips hack (bsd4.3/sysV mixture...) */
-
- #ifdef mips
- extern int errno;
- #endif
-
-
- /*
-
- Regular BSD unix versions
-
- These are a default unix where not already defined specifically.
-
- */
- #ifndef INCLUDES_DONE
- #include <sys/types.h>
- /* #include <streams/streams.h> not ultrix */
- #include <string.h>
-
- #include <errno.h> /* independent */
- #include <sys/time.h> /* independent */
- #include <sys/stat.h>
- #include <sys/param.h>
- #ifdef _AMIGA
- #include <fcntl.h>
- #include <limits.h>
- #else
- #include <sys/file.h> /* For open() etc */
- #endif
- #define INCLUDES_DONE
- #endif /* Normal includes */
-
- /* Directory reading stuff - BSD or SYS V
- */
- #ifdef unix /* if this is to compile on a UNIX machine */
- #define GOT_READ_DIR 1 /* if directory reading functions are available */
- #ifdef USE_DIRENT /* sys v version */
- #include <dirent.h>
- #define direct dirent
- #else
- #include <sys/dir.h>
- #endif
- #if defined(sun) && defined(__svr4__)
- #include <sys/fcntl.h>
- #include <limits.h>
- #endif
- #endif
-
- /* This stuff comes BEFORE the defaults below */
-
- #ifdef _AMIGA /* MJW */
- #ifndef _DNET
- #ifndef _AS225
- #undef NETREAD
- #undef NETWRITE
- #undef NETCLOSE
- #define NETREAD(s,b,l) (recv((s),(b),(l),0))
- #define NETWRITE(s,b,l) (send((s),(b),(l),0))
- #define NETCLOSE(s) (CloseSocket(s))
- #else /* MWM */
- #undef NETREAD
- #undef NETWRITE
- #undef NETCLOSE
- #define NETREAD(s,b,l) (recv((s),(b),(l),0))
- #define NETWRITE(s,b,l) (send((s),(b),(l),0))
- #define NETCLOSE(s) (s_close(s))
- #define IoctlSocket s_ioctl
- #define _STRICT_ANSI 1
- #include <exec/types.h>
- #include <sys/ioctl.h>
- #include <sys/time.h>
- #include <proto/socket.h>
- #include <netdb.h>
- #include <errno.h>
- #define INCLUDES_DONE
- #define TCP_INCLUDES_DONE
- #define sleep(t) Delay(50*(t))
- #endif /* _AS225 */
- #else /* _DNET */
- #include "dnet.h"
- #define TCP_INCLUDES_DONE
- #define ENOTCONN -1
- #define ECONNRESET -1
- #undef NETREAD
- #undef NETWRITE
- #undef NETCLOSE
- #define NETREAD DRead
- #define NETWRITE DWrite
- #define NETCLOSE DClose
- #define sleep(t) Delay(50*(t))
- #endif /* _DNET */
- #endif /* _AMIGA */
-
- /*
-
- Defaults
-
- INCLUDE FILES FOR TCP
-
- */
- #ifndef TCP_INCLUDES_DONE
- #include <sys/ioctl.h> /* EJB */
- #include <sys/socket.h>
- #include <netinet/in.h>
- #ifndef __hpux /* this may or may not be good -marc */
- #include <arpa/inet.h> /* Must be after netinet/in.h */
- #endif
- #include <netdb.h>
- #endif /* TCP includes */
-
-
- /*
-
- MACROS FOR MANIPULATING MASKS FOR SELECT()
-
- */
- #ifdef SELECT
- #ifndef FD_SET
- typedef unsigned int fd_set;
- #define FD_SET(fd,pmask) (*(pmask)) |= (1<<(fd))
- #define FD_CLR(fd,pmask) (*(pmask)) &= ~(1<<(fd))
- #define FD_ZERO(pmask) (*(pmask))=0
- #define FD_ISSET(fd,pmask) (*(pmask) & (1<<(fd)))
- #endif /* FD_SET */
- #endif /* SELECT */
-
- #endif /* TCP_H */
-